0x608060405234801561001057600080fd5b50610b2e806100206000396000f3fe6080604052600436106100695760003560e01c8063bf64a82d11610043578063bf64a82d1461016d578063eaf8520514610180578063f851a4401461019557610070565b80634ddf47d4146100a25780636e9960c3146100f8578063704b6c021461014d57610070565b3661007057005b600061007a6101aa565b90503660008037600080366000845af43d6000803e80801561009b573d6000f35b3d6000fd5b005b3480156100ae57600080fd5b506100c26100bd366004610841565b610289565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b34801561010457600080fd5b507f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c9545b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ef565b34801561015957600080fd5b506100a06101683660046108e6565b61059e565b6100a061017b36600461090a565b610678565b34801561018c57600080fd5b506101286101aa565b3480156101a157600080fd5b5061012861074e565b7fce8e75d5c5227ce29a4ee170160bb296e5dea6934b80a9bd723f7ef1e7c850e7547f0b671eb65810897366dd82c4cbb7d9dff8beda8484194956e81e89b8a361d9c7546040517fcc2913f900000000000000000000000000000000000000000000000000000000815260048101829052600092919073ffffffffffffffffffffffffffffffffffffffff83169063cc2913f990602401602060405180830381865afa15801561025e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610282919061098f565b9250505090565b60006102b37f4e5f991bca30eca2d4643aaefa807e88f96a4a97398933d572a3c0d973004a015490565b1561031f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f484f4c4f47524150483a20616c726561647920696e697469616c697a6564000060448201526064015b60405180910390fd5b60008060008480602001905181019061033891906109dc565b925092509250827f0b671eb65810897366dd82c4cbb7d9dff8beda8484194956e81e89b8a361d9c755817fce8e75d5c5227ce29a4ee170160bb296e5dea6934b80a9bd723f7ef1e7c850e75560008061038f6101aa565b73ffffffffffffffffffffffffffffffffffffffff16836040516024016103b69190610a72565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f4ddf47d400000000000000000000000000000000000000000000000000000000179052516104379190610ac3565b600060405180830381855af49150503d8060008114610472576040519150601f19603f3d011682016040523d82523d6000602084013e610477565b606091505b50915091506000818060200190518101906104929190610adf565b90508280156104e257507fffffffff0000000000000000000000000000000000000000000000000000000081167f4ddf47d400000000000000000000000000000000000000000000000000000000145b610548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e697469616c697a6174696f6e206661696c656400000000000000000000006044820152606401610316565b61057160017f4e5f991bca30eca2d4643aaefa807e88f96a4a97398933d572a3c0d973004a0155565b507f4ddf47d400000000000000000000000000000000000000000000000000000000979650505050505050565b7f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c95473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f484f4c4f47524150483a2061646d696e206f6e6c792066756e6374696f6e00006044820152606401610316565b7f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c955565b7f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c95473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461072e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f484f4c4f47524150483a2061646d696e206f6e6c792066756e6374696f6e00006044820152606401610316565b808260003760008082600034875af13d6000803e80801561009b573d6000f35b60006107787f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c95490565b905090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107f3576107f361077d565b604052919050565b600067ffffffffffffffff8211156108155761081561077d565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60006020828403121561085357600080fd5b813567ffffffffffffffff81111561086a57600080fd5b8201601f8101841361087b57600080fd5b803561088e610889826107fb565b6107ac565b8181528560208385010111156108a357600080fd5b81602084016020830137600091810160200191909152949350505050565b73ffffffffffffffffffffffffffffffffffffffff811681146108e357600080fd5b50565b6000602082840312156108f857600080fd5b8135610903816108c1565b9392505050565b60008060006040848603121561091f57600080fd5b833561092a816108c1565b9250602084013567ffffffffffffffff8082111561094757600080fd5b818601915086601f83011261095b57600080fd5b81358181111561096a57600080fd5b87602082850101111561097c57600080fd5b6020830194508093505050509250925092565b6000602082840312156109a157600080fd5b8151610903816108c1565b60005b838110156109c75781810151838201526020016109af565b838111156109d6576000848401525b50505050565b6000806000606084860312156109f157600080fd5b835192506020840151610a03816108c1565b604085015190925067ffffffffffffffff811115610a2057600080fd5b8401601f81018613610a3157600080fd5b8051610a3f610889826107fb565b818152876020838501011115610a5457600080fd5b610a658260208301602086016109ac565b8093505050509250925092565b6020815260008251806020840152610a918160408501602087016109ac565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60008251610ad58184602087016109ac565b9190910192915050565b600060208284031215610af157600080fd5b81517fffffffff000000000000000000000000000000000000000000000000000000008116811461090357600080fdfea164736f6c634300080d000a