60a060405234801562000010575f80fd5b5060405162001ae238038062001ae2833981016040819052620000339162000107565b6040518060400160405280601581526020017f4465426f7820477561726469616e7320536861726b000000000000000000000081525060405180604001604052806005815260200164088ca84def60db1b815250815f9081620000979190620001d4565b506001620000a68282620001d4565b5050506001600160a01b038116620000f55760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b604482015260640160405180910390fd5b6001600160a01b0316608052620002a0565b5f6020828403121562000118575f80fd5b81516001600160a01b03811681146200012f575f80fd5b9392505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200015f57607f821691505b6020821081036200017e57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620001cf57805f5260205f20601f840160051c81016020851015620001ab5750805b601f840160051c820191505b81811015620001cc575f8155600101620001b7565b50505b505050565b81516001600160401b03811115620001f057620001f062000136565b62000208816200020184546200014a565b8462000184565b602080601f8311600181146200023e575f8415620002265750858301515b5f19600386901b1c1916600185901b17855562000298565b5f85815260208120601f198616915b828110156200026e578886015182559484019460019091019084016200024d565b50858210156200028c57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b608051611822620002c05f395f81816101e201526107de01526118225ff3fe608060405234801561000f575f80fd5b506004361061012f575f3560e01c80636352211e116100ad578063a2309ff81161007d578063c87b56dd11610063578063c87b56dd14610290578063db7fd408146102a3578063e985e9c5146102b6575f80fd5b8063a2309ff814610274578063b88d4fde1461027d575f80fd5b80636352211e1461023357806370a082311461024657806395d89b4114610259578063a22cb46514610261575f80fd5b80631e7269c51161010257806323b872dd116100e857806323b872dd1461020457806332cb6b0c1461021757806342842e0e14610220575f80fd5b80631e7269c5146101b0578063238ac933146101dd575f80fd5b806301ffc9a71461013357806306fdde031461015b578063081812fc14610170578063095ea7b31461019b575b5f80fd5b6101466101413660046113ee565b6102f1565b60405190151581526020015b60405180910390f35b6101636103d5565b6040516101529190611456565b61018361017e366004611468565b610464565b6040516001600160a01b039091168152602001610152565b6101ae6101a936600461149a565b61048b565b005b6101cf6101be3660046114c2565b60066020525f908152604090205481565b604051908152602001610152565b6101837f000000000000000000000000000000000000000000000000000000000000000081565b6101ae6102123660046114db565b61049a565b6101cf61080081565b6101ae61022e3660046114db565b610541565b610183610241366004611468565b610560565b6101cf6102543660046114c2565b61056a565b6101636105c8565b6101ae61026f366004611514565b6105d7565b6101cf60075481565b6101ae61028b366004611561565b6105e2565b61016361029e366004611468565b6105f9565b6101ae6102b1366004611636565b610690565b6101466102c43660046116ab565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061038357507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806103cf57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60605f80546103e3906116dc565b80601f016020809104026020016040519081016040528092919081815260200182805461040f906116dc565b801561045a5780601f106104315761010080835404028352916020019161045a565b820191905f5260205f20905b81548152906001019060200180831161043d57829003601f168201915b5050505050905090565b5f61046e826108f1565b505f828152600460205260409020546001600160a01b03166103cf565b610496828233610942565b5050565b6001600160a01b0382166104c857604051633250574960e11b81525f60048201526024015b60405180910390fd5b5f6104d483833361094f565b9050836001600160a01b0316816001600160a01b03161461053b576040517f64283d7b0000000000000000000000000000000000000000000000000000000081526001600160a01b03808616600483015260248201849052821660448201526064016104bf565b50505050565b61055b83838360405180602001604052805f8152506105e2565b505050565b5f6103cf826108f1565b5f6001600160a01b0382166105ad576040517f89c62b640000000000000000000000000000000000000000000000000000000081525f60048201526024016104bf565b506001600160a01b03165f9081526003602052604090205490565b6060600180546103e3906116dc565b610496338383610a59565b6105ed84848461049a565b61053b84848484610b2e565b6060610604826108f1565b505f6106406040805180820190915260208082527f68747470733a2f2f646174612e6465626f782e70726f2f6467732f6d6574612f9082015290565b90505f81511161065e5760405180602001604052805f815250610689565b8061066884610c9e565b604051602001610679929190611714565b6040516020818303038152906040525b9392505050565b3233146106df5760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e7472616374000060448201526064016104bf565b335f908152600660205260409020541561073b5760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f4d494e54454400000000000000000000000000000000000060448201526064016104bf565b335f90815260066020526040902083905560075483016108008111156107a35760405162461bcd60e51b815260206004820181905260248201527f507572636861736520776f756c6420657863656564206d617820746f6b656e7360448201526064016104bf565b604080513060208201523391810191909152606081018590525f906080016040516020818303038152906040528051906020012090506108397f00000000000000000000000000000000000000000000000000000000000000008286868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610d3b92505050565b6108855760405162461bcd60e51b815260206004820152600360248201527f52454a000000000000000000000000000000000000000000000000000000000060448201526064016104bf565b6007545f5b868110156108a85761089c3383610d9a565b6001918201910161088a565b506007839055604080518481526020810188905233917f9a0eeff0a150e7562f828c8511b7760d9f6a47b1440050c497ff13c46eefb96e910160405180910390a2505050505050565b5f818152600260205260408120546001600160a01b0316806103cf576040517f7e273289000000000000000000000000000000000000000000000000000000008152600481018490526024016104bf565b61055b8383836001610db3565b5f828152600260205260408120546001600160a01b039081169083161561097b5761097b818486610f06565b6001600160a01b038116156109b5576109965f855f80610db3565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b038516156109e3576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6001600160a01b038216610aa4576040517f5b08ba180000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024016104bf565b6001600160a01b038381165f8181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b1561053b576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063150b7a0290610b89903390889087908790600401611742565b6020604051808303815f875af1925050508015610bc3575060408051601f3d908101601f19168201909252610bc091810190611773565b60015b610c2a573d808015610bf0576040519150601f19603f3d011682016040523d82523d5f602084013e610bf5565b606091505b5080515f03610c2257604051633250574960e11b81526001600160a01b03851660048201526024016104bf565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167f150b7a020000000000000000000000000000000000000000000000000000000014610c9757604051633250574960e11b81526001600160a01b03851660048201526024016104bf565b5050505050565b60605f610caa83610f9c565b60010190505f8167ffffffffffffffff811115610cc957610cc961154d565b6040519080825280601f01601f191660200182016040528015610cf3576020820181803683370190505b5090508181016020015b5f19017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084610cfd57509392505050565b5f805f610d48858561107d565b5090925090505f816003811115610d6157610d6161178e565b148015610d7f5750856001600160a01b0316826001600160a01b0316145b80610d905750610d908686866110c6565b9695505050505050565b610496828260405180602001604052805f8152506111e3565b8080610dc757506001600160a01b03821615155b15610ebf575f610dd6846108f1565b90506001600160a01b03831615801590610e025750826001600160a01b0316816001600160a01b031614155b8015610e3357506001600160a01b038082165f9081526005602090815260408083209387168352929052205460ff16155b15610e75576040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016104bf565b8115610ebd5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b610f118383836111f9565b61055b576001600160a01b038316610f58576040517f7e273289000000000000000000000000000000000000000000000000000000008152600481018290526024016104bf565b6040517f177e802f0000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602481018290526044016104bf565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610fe4577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611010576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061102e57662386f26fc10000830492506010015b6305f5e1008310611046576305f5e100830492506008015b612710831061105a57612710830492506004015b6064831061106c576064830492506002015b600a83106103cf5760010192915050565b5f805f83516041036110b4576020840151604085015160608601515f1a6110a68882858561127c565b9550955095505050506110bf565b505081515f91506002905b9250925092565b5f805f856001600160a01b031685856040516024016110e69291906117a2565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1626ba7e000000000000000000000000000000000000000000000000000000001790525161114991906117ba565b5f60405180830381855afa9150503d805f8114611181576040519150601f19603f3d011682016040523d82523d5f602084013e611186565b606091505b509150915081801561119a57506020815110155b8015610d90575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906111d890830160209081019084016117d5565b149695505050505050565b6111ed8383611344565b61055b5f848484610b2e565b5f6001600160a01b038316158015906112745750826001600160a01b0316846001600160a01b0316148061125157506001600160a01b038085165f9081526005602090815260408083209387168352929052205460ff165b8061127457505f828152600460205260409020546001600160a01b038481169116145b949350505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156112b557505f9150600390508261133a565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611306573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661133157505f92506001915082905061133a565b92505f91508190505b9450945094915050565b6001600160a01b03821661136d57604051633250574960e11b81525f60048201526024016104bf565b5f61137983835f61094f565b90506001600160a01b0381161561055b576040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081525f60048201526024016104bf565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146113eb575f80fd5b50565b5f602082840312156113fe575f80fd5b8135610689816113be565b5f5b8381101561142357818101518382015260200161140b565b50505f910152565b5f8151808452611442816020860160208601611409565b601f01601f19169290920160200192915050565b602081525f610689602083018461142b565b5f60208284031215611478575f80fd5b5035919050565b80356001600160a01b0381168114611495575f80fd5b919050565b5f80604083850312156114ab575f80fd5b6114b48361147f565b946020939093013593505050565b5f602082840312156114d2575f80fd5b6106898261147f565b5f805f606084860312156114ed575f80fd5b6114f68461147f565b92506115046020850161147f565b9150604084013590509250925092565b5f8060408385031215611525575f80fd5b61152e8361147f565b915060208301358015158114611542575f80fd5b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f805f8060808587031215611574575f80fd5b61157d8561147f565b935061158b6020860161147f565b925060408501359150606085013567ffffffffffffffff808211156115ae575f80fd5b818701915087601f8301126115c1575f80fd5b8135818111156115d3576115d361154d565b604051601f8201601f19908116603f011681019083821181831017156115fb576115fb61154d565b816040528281528a6020848701011115611613575f80fd5b826020860160208301375f60208483010152809550505050505092959194509250565b5f805f60408486031215611648575f80fd5b83359250602084013567ffffffffffffffff80821115611666575f80fd5b818601915086601f830112611679575f80fd5b813581811115611687575f80fd5b876020828501011115611698575f80fd5b6020830194508093505050509250925092565b5f80604083850312156116bc575f80fd5b6116c58361147f565b91506116d36020840161147f565b90509250929050565b600181811c908216806116f057607f821691505b60208210810361170e57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f8351611725818460208801611409565b835190830190611739818360208801611409565b01949350505050565b5f6001600160a01b03808716835280861660208401525083604083015260806060830152610d90608083018461142b565b5f60208284031215611783575f80fd5b8151610689816113be565b634e487b7160e01b5f52602160045260245ffd5b828152604060208201525f611274604083018461142b565b5f82516117cb818460208701611409565b9190910192915050565b5f602082840312156117e5575f80fd5b505191905056fea2646970667358221220878fdf48062ed490116d8eebc3c05734623fdccdc21a845277af93a49de1dffc64736f6c6343000816003300000000000000000000000096216849c49358b10257cb55b28ea603c874b05e