60806040523480156200001157600080fd5b5060405162001b1038038062001b1083398101604081905262000034916200036e565b6040518060400160405280600781526020016642616c6f6e657960c81b8152506040518060400160405280600781526020016642414c4f4e455960c81b81525081600390805190602001906200008c929190620002c8565b508051620000a2906004906020840190620002c8565b50620000b49150600090503362000109565b826006819055506000620000f183620000dd6064876200011960201b620008641790919060201c565b6200012e60201b620008771790919060201c565b9050620000ff82826200013c565b5050505062000465565b62000115828262000224565b5050565b6000620001278284620003cf565b9392505050565b6000620001278284620003f0565b6001600160a01b038216620001975760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620001ab9190620003b4565b90915550506001600160a01b03821660009081526020819052604081208054839290620001da908490620003b4565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60008281526005602090815260408083206001600160a01b038516845290915290205460ff16620001155760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620002843390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b828054620002d69062000412565b90600052602060002090601f016020900481019282620002fa576000855562000345565b82601f106200031557805160ff191683800117855562000345565b8280016001018555821562000345579182015b828111156200034557825182559160200191906001019062000328565b506200035392915062000357565b5090565b5b8082111562000353576000815560010162000358565b60008060006060848603121562000383578283fd5b83516020850151604086015191945092506001600160a01b0381168114620003a9578182fd5b809150509250925092565b60008219821115620003ca57620003ca6200044f565b500190565b600082620003eb57634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156200040d576200040d6200044f565b500290565b600181811c908216806200042757607f821691505b602082108114156200044957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b61169b80620004756000396000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806340c10f19116100d8578063a457c2d71161008c578063d547741f11610066578063d547741f1461034a578063d5abeb011461035d578063dd62ed3e1461036657600080fd5b8063a457c2d7146102fd578063a9059cbb14610310578063d53913931461032357600080fd5b806391d14854116100bd57806391d14854146102a757806395d89b41146102ed578063a217fddf146102f557600080fd5b806340c10f191461025e57806370a082311461027157600080fd5b8063248a9ca31161012f578063313ce56711610114578063313ce5671461022957806336568abe14610238578063395093511461024b57600080fd5b8063248a9ca3146101f15780632f2ff15d1461021457600080fd5b8063095ea7b311610160578063095ea7b3146101b957806318160ddd146101cc57806323b872dd146101de57600080fd5b806301ffc9a71461017c57806306fdde03146101a4575b600080fd5b61018f61018a3660046113e1565b6103ac565b60405190151581526020015b60405180910390f35b6101ac610445565b60405161019b91906114a2565b61018f6101c736600461137e565b6104d7565b6002545b60405190815260200161019b565b61018f6101ec366004611343565b6104ed565b6101d06101ff3660046113a7565b60009081526005602052604090206001015490565b6102276102223660046113bf565b6105be565b005b6040516012815260200161019b565b6102276102463660046113bf565b6105e9565b61018f61025936600461137e565b610682565b61022761026c36600461137e565b6106cb565b6101d061027f3660046112f7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61018f6102b53660046113bf565b600091825260056020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101ac610764565b6101d0600081565b61018f61030b36600461137e565b610773565b61018f61031e36600461137e565b610831565b6101d07f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6102276103583660046113bf565b61083e565b6101d060065481565b6101d0610374366004611311565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061043f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606060038054610454906115e2565b80601f0160208091040260200160405190810160405280929190818152602001828054610480906115e2565b80156104cd5780601f106104a2576101008083540402835291602001916104cd565b820191906000526020600020905b8154815290600101906020018083116104b057829003601f168201915b5050505050905090565b60006104e4338484610883565b50600192915050565b60006104fa848484610a02565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600160209081526040808320338452909152902054828110156105a65760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105b38533858403610883565b506001949350505050565b6000828152600560205260409020600101546105da8133610c69565b6105e48383610d21565b505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106745760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c660000000000000000000000000000000000606482015260840161059d565b61067e8282610e15565b5050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916104e49185906106c69086906114f3565b610883565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66106f68133610c69565b60065461070c8361070660025490565b90610ed0565b111561075a5760405162461bcd60e51b815260206004820152601260248201527f45786365656473206d617820737570706c790000000000000000000000000000604482015260640161059d565b6105e48383610edc565b606060048054610454906115e2565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561081a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161059d565b6108273385858403610883565b5060019392505050565b60006104e4338484610a02565b60008281526005602052604090206001015461085a8133610c69565b6105e48383610e15565b6000610870828461150b565b9392505050565b60006108708284611544565b73ffffffffffffffffffffffffffffffffffffffff831661090b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161059d565b73ffffffffffffffffffffffffffffffffffffffff82166109945760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161059d565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610a8b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161059d565b73ffffffffffffffffffffffffffffffffffffffff8216610b145760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161059d565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610bb05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161059d565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610bf49084906114f3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c5a91815260200190565b60405180910390a35b50505050565b600082815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661067e57610cc18173ffffffffffffffffffffffffffffffffffffffff166014610fe2565b610ccc836020610fe2565b604051602001610cdd929190611421565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262461bcd60e51b825261059d916004016114a2565b600082815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661067e57600082815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610db73390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600082815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff161561067e57600082815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600061087082846114f3565b73ffffffffffffffffffffffffffffffffffffffff8216610f3f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161059d565b8060026000828254610f5191906114f3565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f8b9084906114f3565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60606000610ff1836002611544565b610ffc9060026114f3565b67ffffffffffffffff81111561103b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611065576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106110c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061114d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000611189846002611544565b6111949060016114f3565b90505b600181111561127f577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106111fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b828281518110611239577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93611278816115ad565b9050611197565b5083156108705760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161059d565b803573ffffffffffffffffffffffffffffffffffffffff811681146112f257600080fd5b919050565b600060208284031215611308578081fd5b610870826112ce565b60008060408385031215611323578081fd5b61132c836112ce565b915061133a602084016112ce565b90509250929050565b600080600060608486031215611357578081fd5b611360846112ce565b925061136e602085016112ce565b9150604084013590509250925092565b60008060408385031215611390578182fd5b611399836112ce565b946020939093013593505050565b6000602082840312156113b8578081fd5b5035919050565b600080604083850312156113d1578182fd5b8235915061133a602084016112ce565b6000602082840312156113f2578081fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610870578182fd5b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611459816017850160208801611581565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351611496816028840160208801611581565b01602801949350505050565b60208152600082518060208401526114c1816040850160208701611581565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000821982111561150657611506611636565b500190565b60008261153f577f4e487b710000000000000000000000000000000000000000000000000000000081526012600452602481fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561157c5761157c611636565b500290565b60005b8381101561159c578181015183820152602001611584565b83811115610c635750506000910152565b6000816115bc576115bc611636565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b600181811c908216806115f657607f821691505b60208210811415611630577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212200e62b7ac92deab5f53924685fcc53df3646da859b18f5be1ac95cb313bc5340e64736f6c634300080400330000000000000000000000000000000000000000015226c467d5a5104c000000000000000000000000000000000000000000000000000000000000000000000f000000000000000000000000f4b896bc0365b3eb9e2ba9c9934fcc3363cbf761