auto
  "   lm_J *n-jeA3p!ӊbѿ? q    # Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose with or without fee is hereby granted,
# provided that the above copyright notice and this permission notice
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

"""A place to store TSIG keys."""

import base64

import dns.name

def from_text(textring):
    """Convert a dictionary containing (textual DNS name, base64 secret) pairs
    into a binary keyring which has (dns.name.Name, binary secret) pairs.
    @rtype: dict"""
    
    keyring = {}
    for keytext in textring:
        keyname = dns.name.from_text(keytext)
        secret = base64.decodestring(textring[keytext])
        keyring[keyname] = secret
    return keyring

def to_text(keyring):
    """Convert a dictionary containing (dns.name.Name, binary secret) pairs
    into a text keyring which has (textual DNS name, base64 secret) pairs.
    @rtype: dict"""
    
    textring = {}
    for keyname in keyring:
        keytext = keyname.to_text()
        secret = base64.encodestring(keyring[keyname])
        textring[keytext] = secret
    return textring
     ew ?     """ Python Character Mapping Codec cp737 generated from 'VENDORS/MICSFT/PC/CP737.TXT' with gencodec.py.

"""#"

import codecs

### Codec APIs

class Codec(codecs.Codec):

    def encode(self,input,errors='strict'):
        return codecs.charmap_encode(input,errors,encoding_map)

    def decode(self,input,errors='strict'):
        return codecs.charmap_decode(input,errors,decoding_table)

class IncrementalEncoder(codecs.IncrementalEncoder):
    def encode(self, input, final=False):
        return codecs.charmap_encode(input,self.errors,encoding_map)[0]

class IncrementalDecoder(codecs.IncrementalDecoder):
    def decode(self, input, final=False):
        return codecs.charmap_decode(input,self.errors,decoding_table)[0]

class StreamWriter(Codec,codecs.StreamWriter):
    pass

class StreamReader(Codec,codecs.StreamReader):
    pass

### encodings module API

def getregentry():
    return codecs.CodecInfo(
        name='cp737',
        encode=Codec().encode,
        decode=Codec().decode,
        incrementalencoder=IncrementalEncoder,
        incrementaldecoder=IncrementalDecoder,
        streamreader=StreamReader,
        streamwriter=StreamWriter,
    )

### Decoding Map

decoding_map = codecs.make_identity_dict(range(256))
decoding_map.update({
    0x0080: 0x0391,     #  GREEK CAPITAL LETTER ALPHA
    0x0081: 0x0392,     #  GREEK CAPITAL LETTER BETA
    0x0082: 0x0393,     #  GREEK CAPITAL LETTER GAMMA
    0x0083: 0x0394,     #  GREEK CAPITAL LETTER DELTA
    0x0084: 0x0395,     #  GREEK CAPITAL LETTER EPSILON
    0x0085: 0x0396,     #  GREEK CAPITAL LETTER ZETA
    0x0086: 0x0397,     #  GREEK CAPITAL LETTER ETA
    0x0087: 0x0398,     #  GREEK CAPITAL LETTER THETA
    0x0088: 0x0399,     #  GREEK CAPITAL LETTER IOTA
    0x0089: 0x039a,     #  GREEK CAPITAL LETTER KAPPA
    0x008a: 0x039b,     #  GREEK CAPITAL LETTER LAMDA
    0x008b: 0x039c,     #  GREEK CAPITAL LETTER MU
    0x008c: 0x039d,     #  GREEK CAPITAL LETTER NU
    0x008d: 0x039e,     #  GREEK CAPITAL LETTER XI
    0x008e: 0x039f,     #  GREEK CAPITAL LETTER OMICRON
    0x008f: 0x03a0,     #  GREEK CAPITAL LETTER PI
    0x0090: 0x03a1,     #  GREEK CAPITAL LETTER RHO
    0x0091: 0x03a3,     #  GREEK CAPITAL LETTER SIGMA
    0x0092: 0x03a4,     #  GREEK CAPITAL LETTER TAU
    0x0093: 0x03a5,     #  GREEK CAPITAL LETTER UPSILON
    0x0094: 0x03a6,     #  GRE